package test2;

/**
 * @author spf
 * @date 2024/9/20
 * @time 19:41
 */
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param firstList int整型二维数组
     * @param secondList int整型二维数组
     * @return int整型二维数组
     */
    public int[][] findIntersection (int[][] firstList, int[][] secondList) {
        // write code here
        List<int[]> commonIntervals = new ArrayList<>();
        int i =0, j=0;

        while(i< firstList.length && j< secondList.length){
            int startMax = Math.max(firstList[i][0], secondList[j][0]);
            int endMin = Math.min(firstList[i][1], secondList[j][1]);

            if(startMax <= endMin){
                commonIntervals.add(new int[]{startMax, endMin});
            }

            if(firstList[i][1] < secondList[j][1]){
                i++;
            }
            else{
                j++;
            }
        }

        return commonIntervals.toArray(new int[commonIntervals.size()][]);
    }

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param str string字符串
     * @return int整型
     */
//    public int StringSplit (String str) {
//        // write code here
//        int tatalB = 0;
//        for(char c: str.toCharArray()){
//            if(c == 'B'){
//                tatalB++;
//            }
//        }
//
//        int maxScore = 0;
//        int leftA=0;
//
//        for (int i = 0; i < str.length(); i++) {
//            if(str.charAt(i) == 'a'){
//                leftA++;
//            }
//            else{
//                tatalB--;
//            }
//
//            int currentScore = leftA - tatalB;
//            maxScore = Math.max(maxScore, currentScore);
//        }
//
//        return maxScore;
//    }

//    private static  final int MOD = 1000000007;
//    public int numberOfWays (int startPos, int endPos, int k) {
//        // write code here
//        int distance = endPos - startPos;
//        if((distance + k) % 2 != 0 || Math.abs(distance) > k){
//            return 0;
//        }
//
//        int x= (distance + k) / 2;
//        return combination(k,x);
//    }
//
//    private int combination(int n, int r) {
//        if(r<0||r>n){
//            return 0;
//        }
//
//        long num = 1;
//        long den = 1;
//
//        for (int i = 0; i < r; i++) {
//            num=(num *(n-i)) % MOD;
//            den = (den * (i+1)) % MOD;
//        }
//        return (int) (num*modInverse(den,MOD)%MOD);
//    }
//
//    private long modInverse(long den, int mod) {
//        return pow(den,mod - 2,mod);
//    }
//
//    private long pow(long den, int i, int mod) {
//        long result = 1;
//        while (i>0){
//            if(i % 2 == 1){
//                result = (result * den) % mod;
//            }
//            den = (den * den) % mod;
//            i /= 2;
//        }
//        return result;
//    }
}
